package org.ehe.erp.domain.quality.dto;

import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;

import java.util.List;

/**
 * 质检执行请求DTO
 *
 * @author zhangnn
 * @className QualityCheckRequest
 * @description 组装人员执行质检时的请求对象
 * @date 2025-09-10 15:00:00
 */
@Data
public class QualityCheckRequest {

    /** 质检记录ID */
    @NotNull(message = "质检记录ID不能为空")
    private Long recordId;

    /** 检验结果（0不合格、1合格） */
    @NotNull(message = "检验结果不能为空")
    @Range(min = 0, max = 1, message = "检验结果值必须为0或1")
    private Integer checkResult;

    /** 实际检验值 */
    @Length(max = 500, message = "实际检验值长度不能超过500字符")
    private String actualValue;

    /** 检验人 */
    @Length(max = 100, message = "检验人长度不能超过100字符")
    private String checkPerson;

    /** 备注 */
    @Length(max = 1000, message = "备注长度不能超过1000字符")
    private String remark;

    // 以下字段用于质检不合格时的反馈信息

    /** 反馈类型（1质量问题、2物料问题、3工艺问题、4其他） */
    @Range(min = 1, max = 4, message = "反馈类型值必须在1-4之间")
    private Integer feedbackType;

    /** 问题描述 */
    @Length(max = 2000, message = "问题描述长度不能超过2000字符")
    private String problemDesc;

    /** 原因分析 */
    @Length(max = 2000, message = "原因分析长度不能超过2000字符")
    private String reasonAnalysis;

    /** 严重程度（1一般、2严重、3非常严重） */
    @Range(min = 1, max = 3, message = "严重程度值必须在1-3之间")
    private Integer severityLevel;

    /** 疑似问题物料ID */
    private Long suspectedMaterialId;

    /** 疑似问题批次ID */
    private Long suspectedBatchId;

    /** 疑似问题供应商ID */
    private Long suspectedSupplierId;

    /** 附件信息列表（照片等） */
    private List<AttachmentInfo> attachments;

    /**
     * 附件信息内部类
     */
    @Data
    public static class AttachmentInfo {
        /** 文件名 */
        private String fileName;

        /** 文件路径 */
        private String filePath;

        /** 文件大小 */
        private Long fileSize;

        /** 文件类型 */
        private String fileType;

        /** 附件类型（1质检照片、2问题照片、3其他文档） */
        private Integer attachmentType;

        /** 上传人 */
        private String uploadPerson;
    }
}
